BLOB polozka

Otázka od: In g. Zdenek Reznicek

28. 9. 2004 15:10

Zdravim konferenci
prosim poradte mi nekdo jak pracovat s BLOB polozkou. Jeste jsem to nikdy
nepouzil. Potrebuji ukladat delsi texty. Pres INSERT a UPDATE to asi
nepujde, ze ? Nejlepsi by byl maly prikladek.

Dik Zdenek



Odpovedá: Petr Brant

28. 9. 2004 15:32

Hm... pracuju s BLOB polozkou zcela stejne jako s jakoukoli jinou,
nepouzivam ale SQL, takze napr. Table.FieldByName('BlobField').AsString:=
'...'; a nesetkal jsem se s zadnym problemem. Predpokladam, ze v SQL to bude
podobne.

RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz <http://brant.wz.cz>


> prosim poradte mi nekdo jak pracovat s BLOB polozkou. Jeste jsem to nikdy
> nepouzil. Potrebuji ukladat delsi texty. Pres INSERT a UPDATE to asi
> nepujde, ze ? Nejlepsi by byl maly prikladek.


Odpovedá: Jaroslav Uher

28. 9. 2004 15:58

On 28 Sep 2004 at 16:32, Petr Brant wrote:

> Hm... pracuju s BLOB polozkou zcela stejne jako s jakoukoli jinou,
> nepouzivam ale SQL, takze napr.
> Table.FieldByName('BlobField').AsString:= '...'; a nesetkal jsem se s
> zadnym problemem. Predpokladam, ze v SQL to bude podobne.
>
> RNDr. Petr Brant [brant@dcomm.cz]
> http://brant.wz.cz <http://brant.wz.cz>
>
>
> > prosim poradte mi nekdo jak pracovat s BLOB polozkou. Jeste jsem to
> > nikdy nepouzil. Potrebuji ukladat delsi texty. Pres INSERT a UPDATE
> > to asi nepujde, ze ? Nejlepsi by byl maly prikladek.

obavam se, ze "pres INSERT, UPDATE" to nebude tak jednoduche

predevsim se podivej tady, jestli vubec zvolit BLOB na tve 'delsi
texty'
http://www.volny.cz/iprenosil/interbase/ip_ib_strings.htm
 
v SQL (TIBQuery) jde BLOB ukladat pomoci TMemoryStream
ja takto ukladam obsah StringGridu

 SL := TStringList.Create;
 TempMemStream := TMemoryStream.Create;
 try
   SL.Clear;
   for I := 0 to StringGrid1.ColCount - 1 do
    for J := 1 to StringGrid1.RowCount - 1 do
     SL.Add(StringGrid1.Cells[I,J]);
  if SL.Text = ''
   then IBQueryTmp.Params[0].AsString := ''
   else begin
          SL.SaveToStream(TempMemStream);
          TempMemStream.Position := 0; // reset to the beginning of
the stream
          IBQueryTmp.Params[0].DataType := ftBLOB;
          IBQueryTmp.Params[0].Value := Null;
          IBQueryTmp.Params[0].LoadFromStream(TempMemStream,ftBlob);
        end;
 finally
   TempMemStream.Free;
   SL.Free;
 end;


Jarek Uher

Odpovedá: tondrej@t-online.de

28. 9. 2004 16:32

> prosim poradte mi nekdo jak pracovat s BLOB polozkou. Jeste jsem to nikdy
> nepouzil. Potrebuji ukladat delsi texty. Pres INSERT a UPDATE to asi
> nepujde, ze ? Nejlepsi by byl maly prikladek.

Napriklad s Interbase to ide aj cez INSERT, UPDATE s parametrami a
streamami. Podrobnosti zrejme zavisia od danej databazy a komponentov,
ktore pouzivas na pracu s nou.

HTH
TOndrej


Odpovedá: Petr Brant

28. 9. 2004 16:48

Pred chvili jsem to zkousel takto:

db.Connected:= true;
q.SQL.Clear;
s:= '0123456789012301234567890123456789012....';
 s:= s+s+s+s+s+s+s+s+s+s+s+s;
 q.SQL.Add('insert into fuel (baddata) values (''' + s + ''')');
 q.ExecSQL;

a proslo to zcela bez problemu. Blob je typu 1 (text). Firebird 1.5, Delphi
5 Pro, WinXP Pro + SP1, IBX Express

RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz <http://brant.wz.cz>


> > prosim poradte mi nekdo jak pracovat s BLOB polozkou. Jeste jsem to
> nikdy
> > nepouzil. Potrebuji ukladat delsi texty. Pres INSERT a UPDATE to asi
> > nepujde, ze ? Nejlepsi by byl maly prikladek.
>
> Napriklad s Interbase to ide aj cez INSERT, UPDATE s parametrami a
> streamami. Podrobnosti zrejme zavisia od danej databazy a komponentov,
> ktore pouzivas na pracu s nou.
>


Odpovedá: Vaclav Sykora

28. 9. 2004 17:02

> Table.FieldByName('BlobField').AsString:=
> '...'; a nesetkal jsem se s zadnym problemem. Predpokladam,
> ze v SQL to bude podobne.

Timto zpusobem jsme pracovali s BLOB zaznamy pod IB7 a po nejakem case
se zacaly objevovat hlasky "BLOB not found". Byl to dost velky problem,
protoze u takto postizeneho pole doslo ke ztrate dat. Zkouseli jsme to
nejak resit, ale nakonec jsme musely vsechny pole typu blob prevest na
varchar(2500). Od te doby je klid.

vas



Odpovedá: MMiro

28. 9. 2004 21:52

From: "Vaclav Sykora" <vaclav.sykora@accidis.cz>
> Timto zpusobem jsme pracovali s BLOB zaznamy pod IB7 a po nejakem case
S FB by problem nemal byt my to pouzivame bezne uz niekolko rokov.
Miro


Odpovedá: Marek

29. 9. 2004 5:23

ahoj,
ja pouzivam toto

// zapsat
var
  blob : TStream;
  fs : TFileStream;
begin
  ZTable1.Insert;
  blob := ZTable1.CreateBlobStream(ZTable1fax, bmWrite);
try
  blob.Seek(0, soFromBeginning);
  fs := TFileStream.Create('C:\DEFAULT.APF', fmOpenRead or fmShareDenyWrite)


    //if fs.Size>16770000 then // omezeni velikost souboru
    
    blob.CopyFrom(fs, fs.Size)

  finally
  fs.Free;
  blob.Free ;
end;


//nacist
var
  blob : TStream;
begin
  blob := ZTable1.CreateBlobStream(ZTable1fax, bmRead);
  blob.Seek(0, soFromBeginning);
  with TFileStream.Create('C:\data.APF', fmCreate) do
    try
      CopyFrom(blob, blob.Size)
    finally
      Free ;
  blob.Free
end;

Marek
 
Zdravim konferenci
prosim poradte mi nekdo jak pracovat s BLOB polozkou. Jeste jsem to nikdy
nepouzil. Potrebuji ukladat delsi texty. Pres INSERT a UPDATE to asi
nepujde, ze ? Nejlepsi by byl maly prikladek.
 
Dik Zdenek